/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package desk;

/**
 *
 * @author AGolubinskyy
 */
import javax.faces.application.Application;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class ForceLoginPhaseListener implements PhaseListener {

    /**
     * Возвращает фазу, которая будет обрабатываться слушателем
     * @return
     */
    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;
    }

    /**
     * Действия, выполняемые перед фазой
     * @param event
     */
    @Override
    public void beforePhase(PhaseEvent event) {        
        navigationRule("/manager.xhtml", "manager");
        navigationRule("/president.xhtml", "president");
        navigationRule("/user.xhtml", "user");
    }

    /**
     * Действия, выполняемые после фазы
     * @param event
     */
    @Override
    public void afterPhase(PhaseEvent event) {
    }

    private void navigationRule(String viewID, String role) {
        FacesContext context = FacesContext.getCurrentInstance();
        String viewId = context.getViewRoot().getViewId();
        if (viewId.equals(viewID)) {
            Application app = context.getApplication();
            LoginBean lb = (LoginBean) app.evaluateExpressionGet(context,"#{loginBean}", LoginBean.class);
            if (lb.getUser() == null ||!lb.getUser().getRole().getRoleName().toLowerCase().equals(role)) {
                ViewHandler viewHandler = app.getViewHandler();
                UIViewRoot viewRoot = viewHandler.createView(context, "/index.xhtml");
                context.setViewRoot(viewRoot);
            }
        }
    }
}
